package com.warm.base.design.b_strategy;

/**
 * @Date: 2019/11/21 13:46
 * @Author: LChuang
 * @Description: 策略模式(行为型)
 *
 *      定义一系列的算法，把它们一个个封装起来，并且使它们可互相替换。本模式使得算法可独立于使用它的客户而变化。
 */
public class Client {

    /**
     * context: 上下文角色(封装角色), 承上启下作用, 疲敝高层模块对策略、算法的直接访问, 封装可能存在的变化
     * strategy: 抽象策略角色, 是对策略、算法家族的抽象，通常为接口，定义每个策略或算法必须具有的方法和属性。algorithm是“运算法则”的意思。
     * concreteStrategy: 具体策略角色
     */
    public static void main(String[] args) {
        Context context;
        context = new Context(new ConcreteStrategyA());
        context.contextInterface();

        context = new Context(new ConcreteStrategyB());
        context.contextInterface();
    }
}
